﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using BusinessLayer.Interfaces;
using BusinessLayer.Implementacion;
using EntityLayer;
using System.Collections;
using DevExpress.Web.ASPxEditors;
using DevExpress.Web.ASPxGridView;

namespace proyGestionVisitas.Gestion
{
    public partial class wfrmInformacionClientesVisitarActualizar : System.Web.UI.Page
    {
        private IFacadeInformacionClientesVisitarActualizar FacadeInformacionClientesVisitarActualizar;
        private IEnumerable<Object> lista;
        private List<T_Cliente> listCliente;
        private List<T_Servicio> listServicio;
        private List<T_Producto> listProducto;
        private List<T_Presupuesto> listPresupuesto;
        private List<T_Contacto> listContacto;
        private List<T_Oportunidad> listOportunidad;
        private List<T_Contacto_Oportunidad> listContOpor;
        private T_Presupuesto objPre;
        private T_Oportunidad objOpor;
        private T_Contacto_Oportunidad objContOpor;
        private T_Oportunidad_Presupuesto objOporPre;
        private T_Contacto objContacto;
        private T_Cliente_Servicio objCliSer;
        private String msg = String.Empty;

        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                if (Session["usu"] == null) { Response.Redirect("~/Account/Login.aspx"); return; }
                if (!IsPostBack)
                {
                    if (Session["ok"] != null)
                    {
                        Session["ok"] = null;
                        MostrarComentario(Session["msg"].ToString());
                    }
                    if (Request.QueryString["id"] == null) { Retornar(); return; }
                    else if (Request.QueryString["id"].ToString() == "2") MostrarDatos();
                    else if (Request.QueryString["id"].ToString() == "4") MostrarDatos();
                    else if (Request.QueryString["id"].ToString() == "5") MostrarDatos();
                    else { Retornar(); return; }
                }
            }
            catch (Exception ex)
            {
                MostrarComentario(ex, "Page_Load");
            }
        }

        private void MostrarDatos()
        {
            try
            {
                Int64? nu_ruc, int64_vacio = null;
                int? id, co_servicio, co_producto, co_presupuesto, int_vacio = null;
                id = (Request.QueryString["id"] != null) ? Convert.ToInt32(Request.QueryString["id"].ToString()) : int_vacio;
                nu_ruc = (Request.QueryString["nr"] != null) ? Convert.ToInt64(Request.QueryString["nr"].ToString()) : int64_vacio;
                co_servicio = (Request.QueryString["cs"] != null) ? Convert.ToInt32(Request.QueryString["cs"].ToString()) : int_vacio;
                co_producto = (Request.QueryString["cp"] != null) ? Convert.ToInt32(Request.QueryString["cp"].ToString()) : int_vacio;
                co_presupuesto = (Request.QueryString["cps"] != null) ? Convert.ToInt32(Request.QueryString["cps"].ToString()) : int_vacio;

                FacadeInformacionClientesVisitarActualizar = new FacadeInformacionClientesVisitarActualizar();

                listCliente = new List<T_Cliente>();
                listServicio = new List<T_Servicio>();
                listProducto = new List<T_Producto>();
                listPresupuesto = new List<T_Presupuesto>();

                listCliente = FacadeInformacionClientesVisitarActualizar.ListarCliente(nu_ruc);
                if (listCliente == null || listCliente.Count() == 0) { Session["ok"] = false; Session["msg"] = "No existen Datos para el Cliente."; Retornar(); return; }
                listServicio = FacadeInformacionClientesVisitarActualizar.ListarServicio(co_servicio);
                if (listServicio == null || listServicio.Count() == 0) { Session["ok"] = false; Session["msg"] = "No existen Datos para el Servicio."; Retornar(); return; }
                listProducto = FacadeInformacionClientesVisitarActualizar.ListarProducto(co_producto);
                if (listProducto == null || listProducto.Count() == 0) { Session["ok"] = false; Session["msg"] = "No existen Datos para el Producto."; Retornar(); return; }
                listPresupuesto = FacadeInformacionClientesVisitarActualizar.ListarPresupuesto(co_presupuesto);
                if (listPresupuesto == null || listPresupuesto.Count() == 0) { Session["ok"] = false; Session["msg"] = "No existen Datos para el Presupuesto."; Retornar(); return; }

                String no_cliente, no_direccion, no_provincia, no_distrito;
                no_cliente = listCliente[0].no_razon_social;
                no_direccion = listCliente[0].no_direccion;
                no_provincia = listCliente[0].no_provincia;
                no_distrito = listCliente[0].no_distrito;

                String no_servicio, no_producto, qt_presupuesto, qt_esfuerzo;
                no_servicio = listServicio[0].no_servicio;
                no_producto = listProducto[0].no_producto;
                qt_presupuesto = listPresupuesto[0].qt_monto_base.ToString();
                qt_esfuerzo = listPresupuesto[0].qt_esfuerzo.ToString();

                int? co_tipo_pres, co_tipo_esf;
                co_tipo_pres = listPresupuesto[0].co_tipo_moneda;
                co_tipo_esf = listPresupuesto[0].co_tipo_esfuerzo;

                txtCodCliente.Text = nu_ruc.ToString();
                txtRazonSocial.Text = no_cliente;
                txtDireccion.Text = no_direccion;
                txtProvincia.Text = no_provincia;
                txtDistrito.Text = no_distrito;
                txtCodServicio.Text = co_servicio.ToString();
                txtServicio.Text = no_servicio;
                txtCodProducto.Text = co_producto.ToString();
                txtProducto.Text = no_producto;
                txtPresupuesto.Text = qt_presupuesto;
                cboTipoPresupuesto.Value = co_tipo_pres.ToString();
                txtTiempoEjecucion.Text = qt_esfuerzo;
                cboTipoTiempoejecucion.Value = co_tipo_esf.ToString();

                ListarDetalleVisita();

                Session["id"] = id;
                Session["nr"] = nu_ruc;
                Session["cs"] = co_servicio;
                Session["cp"] = co_producto;
                Session["cps"] = co_presupuesto;

                if (id == 4 || id == 5)
                {
                    if (Session["cc"] == null)
                    {
                        MostrarComentario("No se ha especificado ningun contacto.");
                        return;
                    }
                    int? co_contacto, co_cont_opor;
                    co_contacto = Convert.ToInt32(Session["cc"].ToString());
                    listContacto = new List<T_Contacto>();
                    listContacto = FacadeInformacionClientesVisitarActualizar.ListarContactos(co_contacto);

                    if (listContacto == null || listContacto.Count() == 0) { MostrarComentario("No existen datos para el Contacto seleccionado."); return; }

                    String no_contacto, no_cargo, nu_movil, nu_fijo, nu_fijo_anexo;
                    no_contacto = listContacto[0].no_contacto;
                    no_cargo = listContacto[0].no_cargo;
                    nu_movil = listContacto[0].nu_telef_cel;
                    nu_fijo = listContacto[0].nu_telef_fijo;
                    nu_fijo_anexo = listContacto[0].nu_telf_fijo_anexo;

                    txtCodContacto.Text = co_contacto.ToString();
                    txtPersonaContacto.Text = no_contacto;
                    txtCargo.Text = no_cargo;
                    txtMovil.Text = nu_movil;
                    txtFijo.Text = nu_fijo;
                    txtAnexo.Text = nu_fijo_anexo;

                    co_cont_opor = Convert.ToInt32(Session["cco"].ToString());

                    objContOpor = new T_Contacto_Oportunidad();
                    listContOpor = new List<T_Contacto_Oportunidad>();

                    listContOpor = FacadeInformacionClientesVisitarActualizar.ListarContactoOportunidad(co_cont_opor);

                    if (listContOpor == null || listContOpor.Count() == 0) { return; }

                    DateTime? fe_visita;
                    String fe_hora, co_tipo_hora, no_ruta_acuerdo;
                    DateTime? hora;
                    hora = new DateTime(01, 01, 01, listContOpor[0].fe_hora.Value.Hours, listContOpor[0].fe_hora.Value.Minutes, listContOpor[0].fe_hora.Value.Seconds);
                    fe_visita = listContOpor[0].fe_visita;
                    fe_hora = listContOpor[0].fe_hora.ToString();
                    fe_hora = String.Format("{0:hh:mm}", hora);
                    co_tipo_hora = listContOpor[0].fe_tipo_hora.ToString();
                    no_ruta_acuerdo = listContOpor[0].no_ruta_acuerdo;

                    dtpFecha.Value = fe_visita;
                    txtHora.Text = fe_hora;
                    cboTipoHora.Value = co_tipo_hora;
                    txtRutaAcuerdo.Text = no_ruta_acuerdo;

                    if (id == 5) { GrabarDetalleVisita(); }
                }
            }
            catch (Exception ex)
            {
                MostrarComentario(ex, "MostrarDatos");
            }
        }

        private void ListarDetalleVisita()
        {
            try
            {
                Int64? nu_ruc, int64_vacio = null;
                int? id, co_servicio, co_producto, co_presupuesto, int_vacio = null;
                String no_sector;
                id = (Request.QueryString["id"] != null) ? Convert.ToInt32(Request.QueryString["id"].ToString()) : int_vacio;
                nu_ruc = (Request.QueryString["nr"] != null) ? Convert.ToInt64(Request.QueryString["nr"].ToString()) : int64_vacio;
                co_servicio = (Request.QueryString["cs"] != null) ? Convert.ToInt32(Request.QueryString["cs"].ToString()) : int_vacio;
                co_producto = (Request.QueryString["cp"] != null) ? Convert.ToInt32(Request.QueryString["cp"].ToString()) : int_vacio;
                co_presupuesto = (Request.QueryString["cps"] != null) ? Convert.ToInt32(Request.QueryString["cps"].ToString()) : int_vacio;
                no_sector = Session["no_sector"].ToString();

                lista = new List<Object>();
                FacadeInformacionClientesVisitarActualizar = new FacadeInformacionClientesVisitarActualizar();
                lista = FacadeInformacionClientesVisitarActualizar.GenerarListaOportunidades_DetalleVisita(nu_ruc, co_servicio, co_producto, co_presupuesto, no_sector);
                dgvDetalleVisita.DataSource = lista;
                dgvDetalleVisita.DataBind();
            }
            catch (Exception ex)
            {
                MostrarComentario(ex, "ListarDetalleVisita");
            }
        }

        private void MostrarComentario(String msg, String titulo = "Mensaje")
        {
            CargarComentario(msg, titulo);
        }

        private void MostrarComentario(Exception ex, String titulo)
        {
            if (ex != null) { msg = (ex.InnerException != null) ? ex.InnerException.Message : ex.Message; }
            CargarComentario(msg, titulo);
        }

        private void CargarComentario(string msg, String titulo)
        {
            lblmenOK.Text = msg;
            pcMensaje.HeaderText = titulo;
            pcMensaje.ShowOnPageLoad = true;
        }

        protected void dgvDetalleVisita_CustomColumnDisplayText(object sender, DevExpress.Web.ASPxGridView.ASPxGridViewColumnDisplayTextEventArgs e)
        {
            if (e.Column.FieldName == "fe_hora") e.DisplayText = String.Format("{0:h:mm tt}", new DateTime(((TimeSpan)(e.Value)).Ticks));
        }

        protected void dgvDetalleVisita_AfterPerformCallback(object sender, DevExpress.Web.ASPxGridView.ASPxGridViewAfterPerformCallbackEventArgs e)
        {
            ListarDetalleVisita();
        }

        protected void dgvDetalleVisita_PageIndexChanged(object sender, EventArgs e)
        {
            ListarDetalleVisita();
        }

        protected void btnGrabarDetalleVisita_Click(object sender, EventArgs e)
        {
            if (!ValidarCampos()) return;
            GrabarDetalleVisita();
        }

        private Boolean ValidarCampos()
        {
            Boolean ok = true;
            msg = String.Empty;
            TimeSpan hora;
            TimeSpan horaIni_M = new TimeSpan(00, 00, 00);
            TimeSpan horaFin_M = new TimeSpan(11, 59, 59);
            TimeSpan horaIni_T = new TimeSpan(01, 00, 00);
            TimeSpan horaFin_T = new TimeSpan(12, 59, 59);
            try
            {
                if (txtCodContacto.Text.Trim() == String.Empty)
                {
                    ok = false;
                    msg = "Debe seleccionar una Persona de Contacto.";
                }
                else if (dtpFecha.Value == null)
                {
                    ok = false;
                    msg = "Debe seleccionar una fecha de visita.";
                }
                else if (txtHora.Text.Trim() == String.Empty)
                {
                    ok = false;
                    msg = "Debe ingresar una hora de visita.";
                }
                else if (!TimeSpan.TryParse(txtHora.Text.Trim(), out hora))
                {
                    ok = false;
                    msg = "Debe ingresar una hora correcta.";
                }
                else if (cboTipoHora.SelectedItem.Value.ToString() == "0")
                {
                    TimeSpan.TryParse(txtHora.Text.Trim(), out hora);
                    if (hora < horaIni_M || hora > horaFin_M)
                    {
                        ok = false;
                        msg = "La hora debe estar entre 00:00 y 11:59";
                    }
                }
                else if (cboTipoHora.SelectedItem.Value.ToString() == "1")
                {
                    TimeSpan.TryParse(txtHora.Text.Trim(), out hora);
                    if (hora < horaIni_T || hora > horaFin_T)
                    {
                        ok = false;
                        msg = "La hora debe estar entre 12:00 - 12:59 y 01:00 - 11:59";
                    }
                }
            }
            catch (Exception ex)
            {
                MostrarComentario(ex, "ValidarCampos");
            }

            if (msg != String.Empty) MostrarComentario(msg);

            return ok;
        }

        private void GrabarDetalleVisita()
        {
            Boolean ok = true;
            msg = String.Empty;
            int? id = null, int_vacio = null;
            try
            {
                id = (Request.QueryString["id"] != null) ? Convert.ToInt32(Request.QueryString["id"].ToString()) : int_vacio;
                int co_opor, co_contacto, co_servicio, co_producto, co_presupuesto, co_cont_opor = 0, co_opor_estado = 2, co_opor_etapa = 2;
                Int64? nu_ruc;
                String no_ruta_acuerdo = String.Empty;
                FacadeInformacionClientesVisitarActualizar = new FacadeInformacionClientesVisitarActualizar();
                if (id == 2)
                {
                    int? ultimo_co_opor;
                    ultimo_co_opor = Convert.ToInt32(dgvDetalleVisita.GetRowValues(0, "co_oportunidad").ToString());
                    co_opor = Convert.ToInt32(ultimo_co_opor);
                    listOportunidad = new List<T_Oportunidad>();
                    listOportunidad = FacadeInformacionClientesVisitarActualizar.ListarOportunidad(co_opor);
                    co_opor_estado = listOportunidad[0].co_opor_estado;
                    co_opor_etapa = listOportunidad[0].co_opor_etapa;
                }
                else if (id == 4 || id == 5)
                {
                    co_cont_opor = Convert.ToInt32(Session["cco"].ToString());
                    co_opor = Convert.ToInt32(Session["co"].ToString());
                    no_ruta_acuerdo = txtRutaAcuerdo.Text.Trim();
                }
                else return;

                co_contacto = Convert.ToInt32(txtCodContacto.Text.Trim());

                int? fe_tipo_hora;
                int co_usuario;
                DateTime? fe_visita, fe_hora;
                TimeSpan? fe_hora_v;

                fe_tipo_hora = (cboTipoHora.SelectedItem != null) ? Convert.ToInt32(cboTipoHora.SelectedItem.Value.ToString()) : int_vacio;
                fe_visita = dtpFecha.Date;
                fe_hora = Convert.ToDateTime(txtHora.Text.Trim());
                co_usuario = Convert.ToInt32(Session["co_usu"].ToString());
                int horas;
                if (fe_tipo_hora == 1 && fe_hora.Value.Hour < 12) horas = fe_hora.Value.Hour + 12;
                else if (fe_tipo_hora == 0 && fe_hora.Value.Hour == 12) horas = fe_hora.Value.Hour - 12;
                else horas = fe_hora.Value.Hour;
                fe_hora_v = new TimeSpan(0, horas, fe_hora.Value.Minute, fe_hora.Value.Second, fe_hora.Value.Millisecond);

                objContOpor = new T_Contacto_Oportunidad();

                if (id == 2)
                {
                    objContOpor.co_contacto = co_contacto;
                    objContOpor.co_oportunidad = co_opor;
                    objContOpor.fe_visita = fe_visita;
                    objContOpor.fe_hora = fe_hora_v;
                    objContOpor.fe_tipo_hora = fe_tipo_hora;

                    co_servicio = Convert.ToInt32(Session["cs"].ToString());
                    co_producto = Convert.ToInt32(Session["cp"].ToString());
                    co_presupuesto = Convert.ToInt32(Session["cps"].ToString());
                    nu_ruc = Convert.ToInt64(Session["nr"].ToString());

                    objOporPre = new T_Oportunidad_Presupuesto();
                    objOporPre.co_oportunidad = co_opor;
                    objOporPre.co_presupuesto = co_presupuesto;

                    listContacto = new List<T_Contacto>();
                    objContacto = new T_Contacto();
                    listContacto = FacadeInformacionClientesVisitarActualizar.ListarContactos(co_contacto);

                    objContacto.co_contacto = listContacto[0].co_contacto;
                    objContacto.no_apellidos = listContacto[0].no_apellidos;
                    objContacto.no_cargo = listContacto[0].no_cargo;
                    objContacto.no_contacto = listContacto[0].no_contacto;
                    objContacto.no_email = listContacto[0].no_email;
                    objContacto.no_permiso = listContacto[0].no_permiso;
                    objContacto.no_sector = listContacto[0].no_sector;
                    objContacto.nu_ruc_cliente = nu_ruc;
                    objContacto.nu_telef_cel = listContacto[0].nu_telef_cel;
                    objContacto.nu_telef_fijo = listContacto[0].nu_telef_fijo;
                    objContacto.nu_telf_fijo_anexo = listContacto[0].nu_telf_fijo_anexo;
                    objContacto.nu_tipo_documento = listContacto[0].nu_tipo_documento;

                    ok = FacadeInformacionClientesVisitarActualizar.InsertarContactoOportunidad(objContOpor);
                    if (ok) ok = FacadeInformacionClientesVisitarActualizar.InsertarOportunidadPresupuesto(objOporPre);
                    if (ok) ok = FacadeInformacionClientesVisitarActualizar.ModificarContacto(objContacto);
                    if (ok)
                    {
                        msg = "Registro Completo.";
                        LimpiarDetalleVisita();
                        ListarDetalleVisita();
                    }
                    else msg = "Error al Registrar.";
                }
                else if (id == 4 || id == 5)
                {
                    if (id == 4)
                    {
                        objContOpor.co_cont_opor = co_cont_opor;
                        objContOpor.co_contacto = co_contacto;
                        objContOpor.co_oportunidad = co_opor;
                        objContOpor.fe_visita = fe_visita;
                        objContOpor.fe_hora = fe_hora_v;
                        objContOpor.fe_tipo_hora = fe_tipo_hora;
                        objContOpor.no_ruta_acuerdo = no_ruta_acuerdo;
                        ok = FacadeInformacionClientesVisitarActualizar.ModificarContactoOportunidad(objContOpor);
                        if (ok)
                        {
                            msg = "Actualizacion Completa.";
                            Session["ok"] = ok;
                            Session["msg"] = msg;
                            msg = String.Empty;
                        }
                        else msg = "Error al Actualizar.";
                    }
                    else if (id == 5)
                    {
                        objContOpor.co_cont_opor = co_cont_opor;
                        objContOpor.co_contacto = listContOpor[0].co_contacto;
                        objContOpor.co_oportunidad = listContOpor[0].co_oportunidad;
                        objContOpor.fe_visita = listContOpor[0].fe_visita;
                        objContOpor.fe_hora = listContOpor[0].fe_hora;
                        objContOpor.fe_tipo_hora = listContOpor[0].fe_tipo_hora;
                        objContOpor.no_ruta_acuerdo = no_ruta_acuerdo;
                        ok = FacadeInformacionClientesVisitarActualizar.EliminarContactoOportunidad(objContOpor);
                        if (ok)
                        {
                            msg = "Eliminación Completa.";
                            Session["ok"] = ok;
                            Session["msg"] = msg;
                            msg = String.Empty;
                        }
                        else msg = "Error al Eliminar.";
                    }
                }
            }
            catch (Exception ex)
            {
                ok = false;
                MostrarComentario(ex, "GrabarDetalleVisita");
            }
            if (msg != String.Empty) MostrarComentario(msg);
            if ((id == 4 || id == 5) && ok) { Recargar(2); return; }

        }

        protected void txtPersonaContacto_Init(object sender, EventArgs e)
        {
            (sender as DevExpress.Web.ASPxEditors.ASPxTextBox).Attributes.Add("ondblclick", "Buscar('C')");
        }

        protected void btnBuscarContacto_Click(object sender, EventArgs e)
        {
            if (!ListarContactos()) return;
            pcContacto.ShowOnPageLoad = true;
        }

        private Boolean ListarContactos()
        {
            Boolean ok = true;
            try
            {
                Int64? nu_ruc_cliente;
                nu_ruc_cliente = Convert.ToInt64(Request.QueryString["nr"].ToString());
                lista = new List<Object>();
                FacadeInformacionClientesVisitarActualizar = new FacadeInformacionClientesVisitarActualizar();
                lista = FacadeInformacionClientesVisitarActualizar.ListarContactosxEmpresa(nu_ruc_cliente);

                if (lista == null || lista.Count() == 0)
                {
                    ok = false;
                    MostrarComentario("No existen contactos.");
                }

                dgvContactos.DataSource = lista;
                dgvContactos.DataBind();
            }
            catch (Exception ex)
            {
                ok = false;
                MostrarComentario(ex, "ListarContactos");
            }
            return ok;
        }

        protected void dgvContactos_AfterPerformCallback(object sender, DevExpress.Web.ASPxGridView.ASPxGridViewAfterPerformCallbackEventArgs e)
        {
            ListarContactos();
        }

        protected void dgvContactos_PageIndexChanged(object sender, EventArgs e)
        {
            ListarContactos();
        }

        protected void btnContactoAceptar_Click(object sender, EventArgs e)
        {
            AceptarContacto();
        }

        private void AceptarContacto()
        {
            try
            {
                int index = dgvContactos.FocusedRowIndex;
                if (index == -1)
                {
                    MostrarComentario("Debe seleccionar un Contacto.");
                    return;
                }

                int? co_contacto;
                co_contacto = Convert.ToInt32(dgvContactos.GetRowValues(index, "co_contacto").ToString());
                listContacto = new List<T_Contacto>();
                FacadeInformacionClientesVisitarActualizar = new FacadeInformacionClientesVisitarActualizar();
                listContacto = FacadeInformacionClientesVisitarActualizar.ListarContactos(co_contacto);

                if (listContacto == null || listContacto.Count() == 0) { MostrarComentario("No existen datos para el Contacto seleccionado."); return; }

                String no_contacto, no_cargo, nu_movil, nu_fijo, nu_fijo_anexo;
                no_contacto = listContacto[0].no_contacto;
                no_cargo = listContacto[0].no_cargo;
                nu_movil = listContacto[0].nu_telef_cel;
                nu_fijo = listContacto[0].nu_telef_fijo;
                nu_fijo_anexo = listContacto[0].nu_telf_fijo_anexo;

                txtCodContacto.Text = co_contacto.ToString();
                txtPersonaContacto.Text = no_contacto;
                txtCargo.Text = no_cargo;
                txtMovil.Text = nu_movil;
                txtFijo.Text = nu_fijo;
                txtAnexo.Text = nu_fijo_anexo;

                pcContacto.ShowOnPageLoad = false;
            }
            catch (Exception ex)
            {
                MostrarComentario(ex.Message, "AceptarContacto");
            }
        }

        private void LimpiarDetalleVisita()
        {
            try
            {
                txtPersonaContacto.Text = String.Empty;
                txtCodContacto.Text = String.Empty;
                txtCargo.Text = String.Empty;
                txtMovil.Text = String.Empty;
                txtFijo.Text = String.Empty;
                txtAnexo.Text = String.Empty;
                dtpFecha.Date = DateTime.Now;
                txtHora.Text = "00:00";
                cboTipoHora.SelectedIndex = 0;
            }
            catch (Exception ex)
            {
                MostrarComentario(ex, "LimpiarDetalleVisita");
            }
        }

        protected void btnRegresarDetalleVisita_Click(object sender, EventArgs e)
        {
            Retornar();
        }

        private void Retornar()
        {
            try
            {
                Response.Redirect("~/Gestion/wfrmInformacionClientesVisitar.aspx", false);
            }
            catch (Exception ex)
            {
                MostrarComentario(ex, "Retornar");
            }
        }

        protected void btnDatosOportunidadActualizar_Click(object sender, EventArgs e)
        {
            if (txtCodServicio.Text.Trim() == String.Empty) { MostrarComentario("Debe seleccionar un Servicio."); return; }
            if (txtCodProducto.Text.Trim() == String.Empty) { MostrarComentario("Debe seleccionar un Producto."); return; }
            ActualizarDatosOportunidad();
        }

        private void ActualizarDatosOportunidad()
        {
            Boolean ok = true;
            msg = String.Empty;
            try
            {
                int? co_oportunidad = null;
                List<int?> listOpor = new List<int?>();
                for (int i = 0; i < dgvDetalleVisita.VisibleRowCount; i++)
                {
                    co_oportunidad = Convert.ToInt32(dgvDetalleVisita.GetRowValues(i, "co_oportunidad").ToString());
                    listOpor.Add(co_oportunidad);
                }

                int co_servicio, co_producto, co_presupuesto;
                co_servicio = Convert.ToInt32(txtCodServicio.Text.Trim());
                co_producto = Convert.ToInt32(txtCodProducto.Text.Trim());
                co_presupuesto = Convert.ToInt32(Request.QueryString["cps"].ToString());
                FacadeInformacionClientesVisitarActualizar = new FacadeInformacionClientesVisitarActualizar();
                foreach (int? item in listOpor)
                {
                    listOportunidad = new List<T_Oportunidad>();
                    listOportunidad = FacadeInformacionClientesVisitarActualizar.ListarOportunidad(item);
                    objOpor = new T_Oportunidad();
                    objOpor.co_oportunidad = listOportunidad[0].co_oportunidad;
                    objOpor.no_descripcion = listOportunidad[0].no_descripcion;
                    objOpor.no_oportunidad = listOportunidad[0].no_oportunidad;
                    objOpor.fe_creacion = listOportunidad[0].fe_creacion;
                    objOpor.fl_estado = listOportunidad[0].fl_estado;
                    objOpor.co_producto = co_producto;
                    objOpor.co_servicio = co_servicio;
                    objOpor.co_opor_estado = listOportunidad[0].co_opor_estado;
                    objOpor.co_opor_etapa = listOportunidad[0].co_opor_etapa;
                    objOpor.co_usuario = listOportunidad[0].co_usuario;

                    ok = FacadeInformacionClientesVisitarActualizar.ModificarOportunidad(objOpor);
                }

                if (ok)
                {
                    Int64 nu_ruc = Convert.ToInt64(txtCodCliente.Text.Trim());
                    lista = new List<Object>();
                    lista = FacadeInformacionClientesVisitarActualizar.ListarClienteServicio(nu_ruc, co_servicio);
                    if (lista == null || lista.Count() == 0)
                    {
                        objCliSer = new T_Cliente_Servicio();
                        objCliSer.co_servicio = co_servicio;
                        objCliSer.nu_ruc_cliente = nu_ruc;
                        ok = FacadeInformacionClientesVisitarActualizar.InsertarClienteServicio(objCliSer);
                    }
                    if (ok)
                    {
                        objPre = new T_Presupuesto();
                        listPresupuesto = new List<T_Presupuesto>();
                        listPresupuesto = FacadeInformacionClientesVisitarActualizar.ListarPresupuesto(co_presupuesto);
                        if (listPresupuesto != null || listPresupuesto.Count() != 0)
                        {
                            decimal? qt_pres, qt_esf;
                            int? co_tipo_moneda, co_tipo_esf;
                            qt_pres = Convert.ToDecimal(txtPresupuesto.Text.Trim());
                            qt_esf = Convert.ToDecimal(txtTiempoEjecucion.Text.Trim());
                            co_tipo_moneda = (cboTipoPresupuesto.SelectedItem != null) ? Convert.ToInt32(cboTipoPresupuesto.SelectedItem.Value.ToString()) : Convert.ToInt32(cboTipoPresupuesto.Value.ToString());
                            co_tipo_esf = (cboTipoTiempoejecucion.SelectedItem != null) ? Convert.ToInt32(cboTipoTiempoejecucion.SelectedItem.Value.ToString()) : Convert.ToInt32(cboTipoTiempoejecucion.Value.ToString());

                            objPre.co_presupuesto = listPresupuesto[0].co_presupuesto;
                            objPre.fe_Real_Fin = listPresupuesto[0].fe_Real_Fin;
                            objPre.fe_Real_Inc = listPresupuesto[0].fe_Real_Inc;
                            objPre.fe_Ten_Fin = listPresupuesto[0].fe_Ten_Fin;
                            objPre.fe_Ten_Inc = listPresupuesto[0].fe_Ten_Inc;
                            objPre.fl_estado = listPresupuesto[0].fl_estado;
                            objPre.no_descripcion = listPresupuesto[0].no_descripcion;
                            objPre.qt_monto_final = listPresupuesto[0].qt_monto_final;
                            objPre.qt_esfuerzo = qt_esf;
                            objPre.qt_monto_base = qt_pres;
                            objPre.co_tipo_esfuerzo = co_tipo_esf;
                            objPre.co_tipo_moneda = co_tipo_moneda;

                            ok = FacadeInformacionClientesVisitarActualizar.ModificarPresupuesto(objPre);
                        }

                    }

                }

                if (ok) msg = "Actualización Exitosa";
                else msg = "Error al Actualizar";

            }
            catch (Exception ex)
            {
                ok = false;
                MostrarComentario(ex, "ActualizarDatosOportunidad");
            }

            if (!ok && msg != String.Empty) MostrarComentario(msg);
            if (ok)
            {
                Session["ok"] = 0;
                Session["msg"] = msg;
                Recargar();
                return;
            }
            //List<Y> listOfY = listOfX.Cast<Y>().ToList()
        }

        protected void btnBuscarServicio_Click(object sender, EventArgs e)
        {
            if (!ListarServicio()) return;
            pcServicio.ShowOnPageLoad = true;
        }

        private Boolean ListarServicio()
        {
            Boolean ok = true;
            try
            {

                lista = new List<Object>();
                FacadeInformacionClientesVisitarActualizar = new FacadeInformacionClientesVisitarActualizar();
                lista = FacadeInformacionClientesVisitarActualizar.ListarServicio();

                if (lista == null || lista.Count() == 0)
                {
                    ok = false;
                    MostrarComentario("No existen Servicios.");
                }

                dgvServicios.DataSource = lista;
                dgvServicios.DataBind();

            }
            catch (Exception ex)
            {
                ok = false;
                MostrarComentario(ex, "ListarServicio");
            }

            return ok;
        }

        protected void btnBuscarProducto_Click(object sender, EventArgs e)
        {
            if (txtCodServicio.Text.Trim() == String.Empty) { MostrarComentario("Debe Seleccionar un Servicio."); return; }
            if (!ListarProducto()) return;
            pcProducto.ShowOnPageLoad = true;
        }

        private Boolean ListarProducto()
        {
            Boolean ok = true;
            try
            {
                int co_servicio;
                co_servicio = Convert.ToInt32(txtCodServicio.Text.Trim());
                lista = new List<Object>();
                FacadeInformacionClientesVisitarActualizar = new FacadeInformacionClientesVisitarActualizar();
                lista = FacadeInformacionClientesVisitarActualizar.ListarProductoxServicio(co_servicio);

                if (lista == null || lista.Count() == 0)
                {
                    ok = false;
                    MostrarComentario("No existen Producto para el Servicio seleccionado.");
                }

                dgvProducto.DataSource = lista;
                dgvProducto.DataBind();
            }
            catch (Exception ex)
            {
                ok = false;
                MostrarComentario(ex, "BuscarProducto");
            }
            return ok;
        }

        protected void txtServicio_Init(object sender, EventArgs e)
        {
            (sender as DevExpress.Web.ASPxEditors.ASPxTextBox).Attributes.Add("ondblclick", "Buscar('S')");

        }

        protected void txtProducto_Init(object sender, EventArgs e)
        {
            (sender as DevExpress.Web.ASPxEditors.ASPxTextBox).Attributes.Add("ondblclick", "Buscar('P')");
        }

        protected void dgvServicios_AfterPerformCallback(object sender, DevExpress.Web.ASPxGridView.ASPxGridViewAfterPerformCallbackEventArgs e)
        {
            ListarServicio();
        }

        protected void dgvServicios_PageIndexChanged(object sender, EventArgs e)
        {
            ListarServicio();
        }

        protected void dgvProducto_AfterPerformCallback(object sender, DevExpress.Web.ASPxGridView.ASPxGridViewAfterPerformCallbackEventArgs e)
        {
            ListarProducto();
        }

        protected void dgvProducto_PageIndexChanged(object sender, EventArgs e)
        {
            ListarProducto();
        }

        protected void btnServicioAceptar_Click(object sender, EventArgs e)
        {
            AceptarServicio();
        }

        private void AceptarServicio()
        {
            try
            {
                int index = dgvServicios.FocusedRowIndex;
                if (index == -1)
                {
                    MostrarComentario("Debe seleccionar un Servicio.");
                    return;
                }
                int? co_servicio;
                co_servicio = Convert.ToInt32(dgvServicios.GetRowValues(index, "co_servicio").ToString());
                listServicio = new List<T_Servicio>();
                FacadeInformacionClientesVisitarActualizar = new FacadeInformacionClientesVisitarActualizar();
                listServicio = FacadeInformacionClientesVisitarActualizar.ListarServicio(co_servicio);

                if (listServicio == null || listServicio.Count() == 0) { MostrarComentario("No existen datos para el Servicio seleccionado."); return; }

                String no_servicio;
                no_servicio = listServicio[0].no_servicio;

                txtCodServicio.Text = co_servicio.ToString();
                txtServicio.Text = no_servicio;

                pcServicio.ShowOnPageLoad = false;

                txtCodProducto.Text = String.Empty;
                txtProducto.Text = String.Empty;
            }
            catch (Exception ex)
            {
                MostrarComentario(ex, "AceptarServicio");
            }
        }

        protected void btnProductoAceptar_Click(object sender, EventArgs e)
        {
            AceptarProducto();
        }

        private void AceptarProducto()
        {
            try
            {
                int index = dgvProducto.FocusedRowIndex;
                if (index == -1)
                {
                    MostrarComentario("Debe seleccionar un Produto.");
                    return;
                }

                int? co_producto;
                co_producto = Convert.ToInt32(dgvProducto.GetRowValues(index, "co_producto").ToString());
                listProducto = new List<T_Producto>();
                FacadeInformacionClientesVisitarActualizar = new FacadeInformacionClientesVisitarActualizar();
                listProducto = FacadeInformacionClientesVisitarActualizar.ListarProducto(co_producto);

                if (listProducto == null || listProducto.Count() == 0) { MostrarComentario("No existen datos para el Producto seleccionado."); return; }

                String no_producto;
                no_producto = listProducto[0].no_producto;

                txtCodProducto.Text = co_producto.ToString();
                txtProducto.Text = no_producto;

                pcProducto.ShowOnPageLoad = false;
            }
            catch (Exception ex)
            {
                MostrarComentario(ex, "AceptarProducto");
            }
        }

        private void Recargar(int? id_pag = null)
        {
            try
            {
                String ruta;
                Int64? nu_ruc, int64_vacio = null;
                int? id, co_servicio, co_producto, co_presupuesto, int_vacio = null;
                id = (Request.QueryString["id"] != null) ? Convert.ToInt32(Request.QueryString["id"].ToString()) : int_vacio;
                if (id_pag != null) id = id_pag;
                nu_ruc = (txtCodCliente.Text.Trim() != String.Empty) ? Convert.ToInt64(txtCodCliente.Text.Trim()) : int64_vacio;
                co_servicio = (txtCodServicio.Text.Trim() != String.Empty) ? Convert.ToInt32(txtCodServicio.Text.Trim()) : int_vacio;
                co_producto = (txtCodProducto.Text.Trim() != String.Empty) ? Convert.ToInt32(txtCodProducto.Text.Trim()) : int_vacio;
                co_presupuesto = (Request.QueryString["cps"] != null) ? Convert.ToInt32(Request.QueryString["cps"].ToString()) : int_vacio;
                ruta = String.Format("~/Gestion/wfrmInformacionClientesVisitarActualizar.aspx?id={0}&nr={1}&cs={2}&cp={3}&cps={4}", id, nu_ruc, co_servicio, co_producto, co_presupuesto);
                Response.Redirect(ruta, false);
                return;
            }
            catch (Exception ex)
            {
                MostrarComentario(ex, "Retornar");
            }
        }

        protected void btnCrearContacto_Click(object sender, EventArgs e)
        {
            CrearContacto();
        }

        private void CrearContacto()
        {
            try
            {
                String url;
                Int64? nu_ruc, int64_vacio = null;
                nu_ruc = (Request.QueryString["nr"] != null) ? Convert.ToInt64(Request.QueryString["nr"].ToString()) : int64_vacio;
                url = String.Format("~/Gestion/wfrmContactoActualizar.aspx?id_cc=1&nr={0}", nu_ruc);
                Response.Redirect(url, false);
                return;
            }
            catch (Exception ex)
            {
                MostrarComentario(ex, "CrearContacto");
            }
        }

        protected void btnModContacto_Click(object sender, EventArgs e)
        {
            ActualizarContacto();
        }

        private void ActualizarContacto()
        {
            try
            {
                String url;
                Int64? nu_ruc, int64_vacio = null;
                int? co_contacto, int_vacio = null;
                nu_ruc = (Request.QueryString["nr"] != null) ? Convert.ToInt64(Request.QueryString["nr"].ToString()) : int64_vacio;
                co_contacto = (txtCodContacto.Text.Trim() != String.Empty) ? Convert.ToInt32(txtCodContacto.Text.Trim()) : int_vacio;
                if (co_contacto == null) { MostrarComentario("Debe seleccionar un Contacto."); return; }
                url = String.Format("~/Gestion/wfrmContactoActualizar.aspx?id_cc=2&cc={0}&nr={1}", co_contacto, nu_ruc);
                Response.Redirect(url, false);
                return;
            }
            catch (Exception ex)
            {
                MostrarComentario(ex, "ActualizarContacto");
            }
        }

        protected void CargarDatosGrid(object sender, EventArgs e)
        {
            Session["ok"] = true;
            Session["msg"] = "Archivo Subido Correctamente.";
            Recargar(2);
        }

        protected void uplArchivo_FileUploadComplete(object sender, DevExpress.Web.ASPxUploadControl.FileUploadCompleteEventArgs e)
        {
            SubirArchivos(e);
        }

        private void SubirArchivos(DevExpress.Web.ASPxUploadControl.FileUploadCompleteEventArgs e)
        {
            try
            {
                String nombre = String.Empty;
                if (!e.IsValid) return;
                nombre = e.UploadedFile.FileName;
                DateTime fechaActual = DateTime.Now;
                String nombre1, nombre2;
                String[] nombres = nombre.Split('.');
                nombre1 = nombres[0];
                nombre2 = nombres[1];
                String fecha = String.Format("{0}{1}{2}_{3}{4}{5}", fechaActual.Year.ToString("0000"), fechaActual.Month.ToString("00"), fechaActual.Day.ToString("00"), fechaActual.Hour.ToString("00"), fechaActual.Minute.ToString("00"), fechaActual.Second.ToString("00"));
                nombre = String.Format("{0}_{2}.{1}", nombre1, nombre2, fecha);
                e.UploadedFile.SaveAs(MapPath("UploadFiles/" + nombre));
                listContOpor = new List<T_Contacto_Oportunidad>();
                FacadeInformacionClientesVisitarActualizar = new FacadeInformacionClientesVisitarActualizar();
                int? co_contacto, co_oportunidad;
                co_contacto = Convert.ToInt32(Session["cc"].ToString());
                co_oportunidad = Convert.ToInt32(Session["co"].ToString());
                listContOpor = FacadeInformacionClientesVisitarActualizar.ListarContactoOportunidad(co_contacto, co_oportunidad);
                objContOpor = new T_Contacto_Oportunidad();
                objContOpor.co_cont_opor = listContOpor[0].co_cont_opor;
                objContOpor.co_contacto = listContOpor[0].co_contacto;
                objContOpor.co_oportunidad = listContOpor[0].co_oportunidad;
                objContOpor.fe_hora = listContOpor[0].fe_hora;
                objContOpor.fe_tipo_hora = listContOpor[0].fe_tipo_hora;
                objContOpor.fe_visita = listContOpor[0].fe_visita;
                objContOpor.no_ruta_acuerdo = nombre;
                Boolean ok = true;
                ok = FacadeInformacionClientesVisitarActualizar.ModificarContactoOportunidad(objContOpor);
                if (ok) e.CallbackData = "successfully";
                else e.CallbackData = "Error al subir el acuerdo.";
            }
            catch (Exception ex)
            {
                e.CallbackData = ex.Message;
            }
        }

        protected void btnMostrar_Click(object sender, EventArgs e)
        {
            MostrarAcuerdo(sender);
        }

        private void MostrarAcuerdo(object sender)
        {
            try
            {
                ASPxButton btn = (ASPxButton)sender;
                if (btn == null) { MostrarComentario("No Existe."); return; }
                String sUrl = btn.ToolTip;
                if (btn.Text == "NO")
                {
                    GridViewDataItemTemplateContainer container = (GridViewDataItemTemplateContainer)btn.NamingContainer;
                    String co_contacto, co_oportunidad;
                    co_contacto = container.Grid.GetRowValues(container.VisibleIndex, new string[] { "co_contacto" }).ToString();
                    co_oportunidad = container.Grid.GetRowValues(container.VisibleIndex, new string[] { "co_oportunidad" }).ToString();
                    Session["cc"] = co_contacto;
                    Session["co"] = co_oportunidad;
                    pcCargaAcuerdo.ShowOnPageLoad = true;
                }
                else if (btn.Text == "SI")
                {
                    String sScript = "window.open('" + sUrl + "',null,'toolbar=0,scrollbars=1,location=0,statusbar=0,menubar=0,resizable=1,width=500,height=300,left=100,top=100');";
                    Page page = (Page)Context.Handler;
                    ScriptManager.RegisterStartupScript(page, page.GetType(), "cerrar", sScript, true);
                }
            }
            catch (Exception ex)
            {
                MostrarComentario(ex, "MostrarAcuerdo");
            }
        }

    }
}